import VueRouter from 'vue-router';
import Vue from 'vue';
Vue.use(VueRouter);
// 该段代码不用记
const originalPush = VueRouter.prototype.push;
VueRouter.prototype.push = function push(location) {
    return originalPush.call(this, location).catch(err => err);
};
import { pressApi } from '@/utils/https';
// 引入stoe实例对象，来操作对应的store方法vuex
import store from '@/store';
const routes = [
    { path: '/', redirect: '/layout' },
    {
        path: '/layout',
        component: () => import('@/views/layout/Layout.vue'),
        children: [
            {
                path: '',
                component: () => import('@/views/layout/home/Home.vue'),
                meta: {
                    title: '首页',
                    icon: 'el-icon-platform-eleme',
                },
                name: 'Home',
            },
            {
                path: 'user',
                component: () => import('@/views/layout/user/User.vue'),
                meta: {
                    title: '用户管理',
                    icon: 'el-icon-platform-eleme',
                },
                name: 'User',
            },
            {
                path: 'info',
                component: () => import('@/views/layout/info/Infomanage.vue'),
                meta: {
                    title: '信息管理',
                    icon: 'el-icon-platform-eleme',
                },
                name: 'Info',
                children: [
                    {
                        path: '',
                        component: () => import('@/views/layout/info/Myinfo.vue'),
                        meta: {
                            title: '个人信息',
                            icon: 'el-icon-platform-eleme',
                        },
                        name: 'Myinfo',
                    },
                ],
            },
        ],
    }, //首页
    { path: '/login', component: () => import('@/views/login/Login.vue') }, // 登录页
];

// 创建路由实例对象
const router = new VueRouter({
    mode: 'history',
    routes: routes,
});
// 路由全局前置守卫
import { getCookie } from '@/utils/cookie.js';
router.beforeEach((to, from, next) => {
    // 获取cookie
    let token = getCookie('token');
    // next();
    // console.log(token);
    if (token) {
        // 已经登陆了
        // 请求左侧接口数据
        if (to.path == '/login') {
            // 相当于-当手动修改url 跳到登录页时，此时token存在，直接跳回到首页
            next('/');
        } else {
            let role = localStorage.getItem('role');
            if (store.state.routes.length == 0) {
                pressApi({ role: role }).then(res => {
                    res.data.forEach(item => {
                        item.component = () => import(`@/views/layout/vaction/${item.name}.vue`);
                        routes[1].children.push(item);
                    });
                    // 解决bug。点击新增的菜单出现白屏，因为new VueRouter（）之前定义并执行过了
                    // 虽然显示添加成功，但是，并没有真正添加成功
                    // 此步骤相当于重新newVueRouter(更新后的routes)，相当于老师讲的给后来同学补发糖的故事
                    router.addRoutes(routes);
                    // 将请求后的更新完的router存到vuex中，然后方便首页左侧aisde组件调用
                    store.dispatch('setRoutesAsync', routes);
                    // 刚添加完新路由，需要刷新路由
                    // 防止新addRoutes（routes）路由没有完全加载完，(add完)导致的页面白屏问题，找不到页面问题
                    next({ ...to, replace: true });
                });
            } else {
                next();
            }
        }
    } else if (!token && to.path != '/login') {
        // 跳转的页面不是登录页，强迫去登录页
        next('/login');
    } else {
        // 如果点击去登录页，直接放行
        next();
    }
});
export default router;
